package main

import "fmt"

// 递归函数的原理
// 在递归时，相当于创建了一个管道，把每次的调用都扔进到管道内
// 先进后出，直到管道为空，也就是递归结束，然后开始返回结果

// 递归函数的使用场景
// 多级目录文件遍历
// 多层数据结构数据查找
// 网页菜单自动生成
// 数值计算：斐波那契数列、汉诺塔问题、阶乘等

func factorial(n int) (result int) {
	if n == 1 {
		return 1
	}
	result = factorial(n-1) * n
	return result

}
func main() {
	//递归函数：函数自己调用自己，直到达到条件后才能结束返回结果
	// n! =n*(n-1)*(n-2)…… * 1
	fmt.Println(factorial(5))

}
